"""
 1.socket创建一个套接字
 2.bind绑定ip和port
 3.listen使套接字设置为被动模式
 4.accept等待客户端的链接
 5.recv/send接收并发送数据   
    
"""
import socket
import utils#自己创建的译码工具
#1.socket创建一个套接字
#AF_INET: IPv4地址,SOCK_STREAM: TCP协议
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print(tcp_server_socket)

#2.bind绑定ip和port
#如果ip是空字符串，代表所有本机网卡的ip地址
#tcp_server_socket.bind(('127.0.0.1',7788))
tcp_server_socket.bind(('127.0.0.1',7788))

#3.listen使套接字设置为被动模式
#参数：等待客户端连接的最大数量，旨在windows系统里生效，其他系统不限制
#此时，socket套接字对象由主动连接模式变为被动模式，等待客户端接入
tcp_server_socket.listen(128)

print("--------------服务器启动，等待客户端连接--------------")
while True:
    #4.accept等待客户端的连接（阻塞当前线程，有新客户接入时才释放阻塞）
    tcp_client,client_addr = tcp_server_socket.accept()#解包
    print("有新的客户来啦!:",client_addr)

    while True:
        #5.recv/send接收并发送数据
        client_data = tcp_client.recv(1024)
        if client_data:
            print("客户端发来数据:",utils.decode_data(client_data))

            #服务器回复数据
            tcp_client.send("消息已收到！".encode('utf-8'))
        else:
            #收到空内容说明客户端断开连接
            print(client_data,type(client_data))
            print("客户端断开连接",client_addr)
            #释放为这个客户端创建的socket套接字对象
            tcp_client.close()
            break
#6关闭服务器
#关闭tcp服务器套接字，不再接收新的客户端接入
#已经连接的客户端socket对象不受影响
tcp_server_socket.close()